Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: parsing decimals and scientific notation #94

Merged
merged 1 commit into from
Oct 24, 2023
Merged

Conversation

kricsleo
Copy link
Contributor

πŸ”— Linked issue

Closes #93

❓ Type of change

  • πŸ“– Documentation (updates to the documentation, readme, or JSdoc annotations)
  • 🐞 Bug fix (a non-breaking change that fixes an issue)
  • πŸ‘Œ Enhancement (improving an existing functionality like performance)
  • ✨ New feature (a non-breaking change that adds functionality)
  • 🧹 Chore (updates to the build process or auxiliary tools and libraries)
  • ⚠️ Breaking change (fix or feature that would cause existing functionality to change)

πŸ“š Description

Fix parsing of multi-digit numbers and scientific notation.

If anything needs tweaking don't hesitate to point it out, you can always edit it too :)

πŸ“ Checklist

  • I have linked an issue or discussion.
  • I have updated the documentation accordingly.

@codecov
Copy link

codecov bot commented Oct 24, 2023

Codecov Report

Merging #94 (701d67a) into main (3721051) will not change coverage.
The diff coverage is 100.00%.

@@            Coverage Diff            @@
##              main       #94   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            1         1           
  Lines           96        96           
  Branches        39        38    -1     
=========================================
  Hits            96        96           
Files Coverage Ξ”
src/index.ts 100.00% <100.00%> (ΓΈ)

Copy link
Member

@pi0 pi0 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@@ -5,7 +5,7 @@ const suspectProtoRx =
const suspectConstructorRx =
/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/;

const JsonSigRx = /^\s*["[{]|^\s*-?\d[\d.]{0,14}\s*$/;
const JsonSigRx = /^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is only a small issue with this. It seems maximum 16 digits cannot be combined with 17 decimal places at the same time. So 1.1234567812345678 is valid (well, kinda it will rounded to 1.1234567812345677) also 1234567812345678 is valid but 1234567812345678.1234567812345678 will be trimmed to 1234567812345678.

I don't think for this particular regex it would be an issue because JSON.parse will normalize it anyway...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, the regex here are slightly rough, and being able to cover all the right scenarios should be enough, leaving the rest to JSON.parse

Copy link
Contributor Author

@kricsleo kricsleo Oct 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pi0 Sorry to disturb, I ran into a new problem today, in nodejs numbers can have more than 17 decimals (Math.random() gave me this result 0.018178923413311843), so in order to cover more scenarios, can we remove the digit limit and just match with more than 1 digit, for example:

- const JsonSigRx = /^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;
+ const JsonSigRx = /^\s*["[{]|^\s*-?\d+(\.\d+)?([Ee][+-]?\d+)?\s*$/;

@pi0 pi0 merged commit d9ba16d into unjs:main Oct 24, 2023
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

parsing decimals incorrectly
2 participants